package com.yzh.zhipu.executor;

import com.yzh.zhipu.model.ChatRequest;
import com.yzh.zhipu.model.ChatResponse;
import com.yzh.zhipu.model.ImageRequest;
import com.yzh.zhipu.model.ImageResponse;
import okhttp3.sse.EventSource;
import okhttp3.sse.EventSourceListener;

import java.io.IOException;
import java.util.concurrent.CompletableFuture;

/**
 * 执行器，根据新&旧模型选择不同的执行器(解决参数不同等兼容问题)
 */
public interface Executor {
    /**
     * 问答模型，流式传输
     *
     * @param request             请求参数
     * @param eventSourceListener 监听信息
     * @return 应答结果
     */
    EventSource completions(ChatRequest request, EventSourceListener eventSourceListener);

    /**
     * 问答模型，同步请求
     * @param chatRequest
     * @return
     */
    ChatResponse completionsSync(ChatRequest chatRequest) throws IOException;

    /**
     * 问答模型，将异步请求通过CompletableFuture变为同步反馈信息
     *
     * @param request 请求参数
     * @return
     */
    CompletableFuture<java.lang.String> completions(ChatRequest request);

    /**
     * 图片生成接口（同步）
     *
     * @param request
     * @return
     */
    ImageResponse genImage(ImageRequest request) throws IOException;

}
